/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CapaNegocios;

import controlador.PlatosJpaController;
import entidad.Platos;
import controlador.ClasificacionJpaController;
import controlrestaurante.pmf;
import entidad.Clasificacion;
import java.util.List;
import entidad.DetalleDePlato;
import controlador.DetalleDePlatoJpaController;
import entidad.Producto;

/**
 *
 * @author Milvia
 */
public class CNPlatos {
    public static boolean insertar(Platos plato)
    {
        try{
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            controlador.create(plato);
        }catch (Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean insertar (String nombre,float precioCosto, float precio, String descripcion, 
            int idClasificacion, String imagen, List<DetalleDePlato> detalles)
    {
        ClasificacionJpaController controladorClasificacion = new ClasificacionJpaController(pmf.getInstancia().getEMF());
        Clasificacion clasificacion = controladorClasificacion.findClasificacion(idClasificacion);
        if((clasificacion == null))
            return false;
        try{
            Platos plato = new Platos();
            plato.setNombre(nombre);
            plato.setPrecio(precio);
            plato.setPrecioCosto(precioCosto);
            plato.setDescripcion(descripcion);
            plato.setActivo(Boolean.TRUE);
            plato.setClasificacionidClasificacion(clasificacion);
            plato.setDireccionImagen(imagen);
            insertar(plato);
            for (DetalleDePlato d : detalles)
            {
                try
                {
                    d.setPlatos(plato);
                    DetalleDePlatoJpaController controlador = new DetalleDePlatoJpaController(pmf.getInstancia().getEMF());
                    controlador.create(d);
                    plato.getDetalleDePlatoCollection().add(d);
                }
                catch (Exception e)
                {
                    return false;
                }
            }
            modificar(plato);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
   
     public static boolean eliminar(Platos plato)
    {
        
        try{
            DetalleDePlatoJpaController controladorDetalle = new DetalleDePlatoJpaController(pmf.getInstancia().getEMF());
            for(DetalleDePlato temp : plato.getDetalleDePlatoCollection())
            {
                controladorDetalle.destroy(temp.getDetalleDePlatoPK());
            }
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            controlador.destroy(plato.getIdPlatos());
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static boolean modificar (Platos plato)
    {
        try{
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(plato);
        }catch (Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean modificar (Platos plato, List<DetalleDePlato> listaEliminados)
    {
        try{
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            DetalleDePlatoJpaController controladorDetalle = new DetalleDePlatoJpaController(pmf.getInstancia().getEMF());
            if(!listaEliminados.isEmpty())
            {
                for(DetalleDePlato temp : listaEliminados)
                {
                    try{
                        controladorDetalle.destroy(temp.getDetalleDePlatoPK());
                    }
                    catch(Exception e)
                    {                        
                    }
                }
            }
            for(DetalleDePlato temp : plato.getDetalleDePlatoCollection())
            {
                if(temp.getDetalleDePlatoPK() == null)
                {
                    temp.setPlatos(plato);
                    controladorDetalle.create(temp);
                }
                else
                {
                    controladorDetalle.edit(temp);
                }
            }
            controlador.edit(plato);
        }catch (Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean modificar (String nombre, float precio, String descripcion, int idClasificacion, String imagen, List<DetalleDePlato> detalles)
    {
        ClasificacionJpaController controladorClasificacion = new ClasificacionJpaController(pmf.getInstancia().getEMF());
        Clasificacion clasificacion = controladorClasificacion.findClasificacion(idClasificacion);
        if((clasificacion == null))
            return false;
        try{
            Platos plato = new Platos();
            plato.setNombre(nombre);
            plato.setPrecio(precio);
            plato.setDescripcion(descripcion);
            plato.setActivo(Boolean.TRUE);
            plato.setClasificacionidClasificacion(clasificacion);
            plato.setDireccionImagen(imagen);
            for (DetalleDePlato d : detalles)
            {
                try
                {
                    d.setPlatos(plato);
                    DetalleDePlatoJpaController controlador = new DetalleDePlatoJpaController(pmf.getInstancia().getEMF());
                    controlador.create(d);
                    plato.getDetalleDePlatoCollection().add(d);
                }
                catch (Exception e)
                {
                    return false;
                }
            }
            modificar(plato);
        }
        catch(Exception e )
        {
            return false;
        }
        return true;
    }
    
    public static boolean activar (int id)
    {
        PlatosJpaController controladorPlato = new PlatosJpaController(pmf.getInstancia().getEMF());
        Platos plato = controladorPlato.findPlatos(id);
        if (plato == null)
            return false;
        try{
            plato.setActivo(Boolean.TRUE);
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(plato);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    public static boolean desactivar (int id)
    {
        PlatosJpaController controladorPlato = new PlatosJpaController(pmf.getInstancia().getEMF());
        Platos plato = controladorPlato.findPlatos(id);
        if (plato == null)
            return false;
        try{
            plato.setActivo(Boolean.FALSE);
            PlatosJpaController controlador = new PlatosJpaController(pmf.getInstancia().getEMF());
            controlador.edit(plato);
        }
        catch(Exception e){
            return false;
        }
        return true;
    }
    
    public static Platos buscarId(int id)
    {
        Platos usuario;
        try{
            PlatosJpaController controladorPlato = new PlatosJpaController(pmf.getInstancia().getEMF());
            usuario = controladorPlato.findPlatos(id);
        }
        catch(Exception e)
        {
            return null;
        }
        return usuario;    
    }
    
    public static List<Platos> buscarActivos()
    {
        List<Platos> tipoUsuarios = (List) Consultas.consulta("Platos", "findByActivo", "activo", true);
        return tipoUsuarios;
    }
    
    public static List<Platos> buscarEliminados()
    {
        List<Platos> tipoUsuarios = (List) Consultas.consulta("Platos", "findByActivo", "activo", false);
        return tipoUsuarios;
    }
    
    public static List<Platos> buscarPorNombre(String nombre)
    {
        List<Platos> tipoUsuarios = (List) Consultas.consulta("Platos", "findByNombre", "nombre", "%"+nombre+"%");
        return tipoUsuarios;
    }
    
    public static Platos actualizarCosto(Platos plato)
    {
        float x = 0;
        for(DetalleDePlato temp : plato.getDetalleDePlatoCollection())
        {
            Producto producto = temp.getProducto();
            x=x+Conversor.convertirProducto( producto.getUnidadDeMedidaidUnidadDeMedida(),temp.getUnidadDeMedidaidUnidadDeMedida(), producto.getPrecio())
                    *temp.getCantidad();
        }
        plato.setPrecioCosto(x);
        modificar(plato);
        return plato;
    }
}
